perm filename COURSE[1,JRA] blob sn#544183 filedate 1980-11-05 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002			       The Art of Computer Science
C00007 00003	notational harrangue
C00008 ENDMK
CāŠ—;
		       The Art of Computer Science

This course is a  challenge. I plan to  challenge your conception of  what
computing is  about, to  challenge  the traditional  view of  the  purpose
programming languages, to challenge the  usual conception of how one  does
programming, to challenge the traditional curriculum of computing, and  in
general to challenge your minds.

The course  is neither  mathematics nor  engineering; it  draws from  both
disciplines, as does all of computer science. The intent of the course  is
to investigate the phenomena  called computing at  a level of  abstraction
that will  allows us  to explicate  fundamental principles  that  underlie
computing theory and practice.

The texts for this  course are (1)  these notes, (2) "Zen  and the Art  of
Motorcycle maintenance",  and  (3)  "Godel, Escher,  Bach",  and  (4)  the
programming lab notes.

These  class  notes  form  the   main  structure  of  the  technical   and
"meta-computational" perspective  that supports  the inquiry.   "Zen"  has
valuable insights in  the relationships between  art and science,  besides
the appropriate "tone" for this course. "Godel, Escher, Bach" is good fun;
an exemplary  book  showing  how  one can  present  complex  ideas  in  an
intuitive, yet faithful,  setting.  Much  of "GEB"  will show  up in  this
course.

A lab  session  is  associated  with  this  course.   Since  part  of  our
exploration involves computing, it is  a requirement that one  understands
the art of computing --oftern called "programming". Learning to program is
like learning to drive --both can profit from classroom work that explains
basic concepts.   However both  require "hands-on"  experience before  one
really gets "the  feel" of  the instrument.   As with  driving school,  we
should supply the students with the best available vehicles and guide them
in the process of applying the theory.

There are two important practical  lessons in the programming  experience:
first to develop an appreciation for abstraction and abstract programming,
and second  to develop  an understanding  of how  interactive  programming
differs from the traditional "batch" (or modified "batch")-procesing view.
Abstract  object-oriented  programming  carried  out  in  an   interactive
programming environment is the future of applied computing.

The course will be a "mind-stretcher", investigating:  computation, proof,
and truth;  computing formalism  and mathematical  notation; recursion  in
logic and computing; abstract algorithms and objects; symbolic computation
and Godel numbering;  evaluation and  LISP machines;  algorithms as  data;
data  as  algorithms;  compilation  and  LISP  machines;  pattern-directed
computation  and   logic;  interactive   computing  versus   "discipline";
implementation of LISP-like languages.

The course will be  self-contained: no prerequsites  other than a  healthy
intellectual curiousity and the self-discipline to think.
notational harrangue